iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0

前言

上一篇文章講到可以新增的一些功能,來讓整體使用體驗變的更好,這篇文章來探討還可以修正的地方

線程

我們可以將獲取語意的工作發布在其他線程上,這樣一來就不會阻塞到主線程上的工作,常見的切線程的方式有 Therad、Retrofit

Thread

基本上大概的架構都是像下面演示的一樣

new Thread(new Runnable() {  
    @Override  
    public void run() {  
        // 在這裡執行耗時操作  
    }  
}).start(); 

其中 Runnable 也可以手動新增一個架構,將原本的 new Runnable(){}外包出去

接著碰到要更新主線程的東西的時候,我們可以選擇使用 runOnUiThread{} 來強制內部的程式執行在畫面上

Retrofit

我們可以利用 Retrofit 做到更精細的線程切換
大概用法如下

service.getUser(1)  
    .subscribeOn(Schedulers.io())        // 在 IO 線程上執行網絡請求  
    .observeOn(AndroidSchedulers.mainThread())  // 在主線程上觀察結果  
    .subscribe(user -> {  
        // 這裡的代碼在主線程上執行  
    }, throwable -> {  
        // 錯誤處理也在主線程上執行  
    });

透過上述切換線程的方式可以避免在要取語意分析結果時,因為網路請求而導致整個線程 Delay,進而讓畫面卡住的問題

Markdown

現在回傳回來的格式基本上都是 Markdown 格式,因此我們可以選擇使用一個套件 Markwon,這個套件提供了將 TextView 元件變成可以支援 Markdown 格式的元件

Markwon 支援一般的 Markdown格式,需要顯示表格的話則要額外再添加table 的套件

    // markwon
    implementation 'io.noties.markwon:core:4.6.2'
    implementation 'io.noties.markwon:html:4.6.2'
    // markwon table plugin
//    implementation 'io.noties.markwon:ext-tables:4.6.2'

接著主要的使用方式如下

Markwon markwon = Markwon.builder(context).build();

markwon.setMarkdown("TextView", "Markdown文本")

需要顯示 table 時,則在 build 前先將 table 加入

Markwon markwon = Markwon.builder(context)
                    .usePlugin(TablePlugin.create(context)).build;


上一篇
[DAY28] 在前端架設 Semantic Kernel 2
下一篇
[DAY30] 完賽感言
系列文
智慧語義互動平台:基於Spring和Semantic Kernel的Android應用創新30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言